home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / msdos / raytrace / pov / bin / xtras / addon.h next >
C/C++ Source or Header  |  1994-09-11  |  6KB  |  239 lines

  1. /****************************************************************************
  2. *
  3. *  ATTENTION!!!
  4. *
  5. *  THIS FILE HAS BEEN MODIFIED!!! IT IS NOT PART OF THE OFFICAL
  6. *  POV-RAY 2.2 DISTRIBUTION!!!
  7. *
  8. *  THIS FILE IS PART OF "FASTER THAN POV-RAY" (VERSION 2.2),
  9. *  A SPED-UP VERSION OF POV-RAY 2.2. USE AT YOUR OWN RISK!!!!!!
  10. *
  11. *  New files: addon0.c, addon1.c, addon2.c, addon3.c, addon.h
  12. *
  13. *  The additional modules were written by Dieter Bayer.
  14. *
  15. *  Send comments, suggestions, bugs, ideas ... to:
  16. *
  17. *  e-mail: dieter@cip.e-technik.uni-erlangen.de
  18. *  CIS: 100255.3074
  19. *
  20. *  All changed/added lines are enclosed in #ifdef DB_CODE ... #endif
  21. *
  22. *  The vista projection was taken from:
  23. *
  24. *    A. Hashimoto, T. Akimoto, K. Mase, and Y. Suenaga, 
  25. *    "Vista Ray-Tracing: High Speed Ray Tracing Using Perspective
  26. *    Projection Image", New Advances in Computer Graphics, Proceedings
  27. *    of CG International '89, R. A. Earnshaw, B. Wyvill (Eds.), 
  28. *    Springer, ..., pp. 549-560
  29. *
  30. *  The idea for the light buffer was taken from:
  31. *
  32. *    E. Haines and D. Greenberg, "The Light Buffer: A Shadow-Testing 
  33. *    Accelerator", IEEE CG&A, Vol. 6, No. 9, Sept. 1986, pp. 6-16
  34. *
  35. *****************************************************************************/
  36.  
  37. /****************************************************************************
  38. *
  39. *  ATTENTION!!!
  40. *
  41. *  THIS FILE HAS BEEN MODIFIED!!! IT IS NOT PART OF THE OFFICAL
  42. *  POV-RAY 2.2 DISTRIBUTION!!!
  43. *
  44. *  THIS FILE IS PART OF "FASTER THAN POV-RAY" (VERSION 1.1),
  45. *  A SPED-UP VERSION OF POV-RAY 2.2. USE AT YOUR OWN RISK!!!!!!
  46. *
  47. *  New files: addon0.c, addon1.c, addon2.c, addon3.c, addon.h
  48. *
  49. *  The additional modules were written by Dieter Bayer.
  50. *
  51. *  Send comments, suggestions, bugs to:
  52. *
  53. *  dieter@cip.e-technik.uni-erlangen.de
  54. *
  55. *  If I have enough time I will try to fix any bugs.
  56. *
  57. *  All changed/added lines are enclosed in #ifdef DB_CODE ... #endif
  58. *
  59. *  The new/changed modules speed-up ray-tracing in two ways:
  60. *
  61. *   - Objects are projected onto the viewing plane a priori. Thus
  62. *     the number of ray/object intersection tests is reduced for
  63. *     primary rays.
  64. *
  65. *   - A light buffer is used for every spotlight. Each object is
  66. *     projected a priori onto the six sides of a cube enclosing
  67. *     the light source. Thus the number of ray/object intersection
  68. *     tests is reduced for shadow rays.
  69. *
  70. *  The vista projection of qaudrics was taken from:
  71. *
  72. *    A. Hashimoto, T. Akimoto, K. Mase, and Y. Suenaga, "Vista
  73. *    Ray-Tracing: High Speed Ray Tracing Using Perspective
  74. *    Projection Image", New Advances in Computer Graphics,
  75. *    Proceedings of CG International '89, R. A. Earnshaw,
  76. *    B. Wyvill (Eds.), Springer, ...
  77. *
  78. *  The idea for the light buffer was taken from:
  79. *
  80. *    E. Haines and D. Greenberg, "The Light Buffer: A Shadow-
  81. *    Testing Accelerator", IEEE CG&A, Vol. 6, No. 9, Sept. 1986, pp. 6-16
  82. *
  83. *****************************************************************************/
  84.  
  85. /****************************************************************************
  86. *  addon.h
  87. *
  88. *  This module was written by Dieter Bayer.
  89. *
  90. *  Some definitions for the addon-modules and lighting.c.
  91. *
  92. *  01.03.1994 : Creation
  93. *
  94. *  29.04.1994 : Version 2.0
  95. *
  96. ******************************************************************************/
  97.  
  98. #ifdef DB_CODE
  99.  
  100. /* extended options */
  101.  
  102. #define USE_VISTA_BUFFER           1
  103. #define USE_LIGHT_BUFFER           2
  104. #define USE_PREVIEW                4
  105. #define USE_BOUND_QUADRICS         8
  106. #define USE_SPLIT_FINITE_UNIONS    16
  107. #define USE_SPLIT_INFINITE_UNIONS  32
  108.  
  109.  
  110.  
  111. /* tracing algorithms */
  112.  
  113. #define STANDARD_ALGORITHM     1
  114. #define WYVILL_SHARP_ALGORITHM 2
  115.  
  116.  
  117.  
  118. /* flags for the different algorithms to descend the vista/light trees */
  119.  
  120. #define PROJECTIONS_WITHOUT_SLABS   1
  121. #define PROJECTIONS_WITH_LEAF_SLABS 2
  122. #define PROJECTIONS_WITH_NODE_SLABS 3
  123.  
  124.  
  125.  
  126. /* flag to mark a node as pruned */
  127.  
  128. #define PRUNE_CHECK 128
  129. #define PRUNE_TEMPORARY 128
  130. #define PRUNE_TEMPORARY_INVERS 127
  131.  
  132.  
  133. #ifndef MAX_LB_ENTRY
  134. #define MAX_LB_ENTRY 32000
  135. #endif
  136.  
  137. #ifndef MIN_LB_ENTRY
  138. #define MIN_LB_ENTRY -32000
  139. #endif
  140.  
  141. #ifndef MAX_VB_ENTRY
  142. #define MAX_VB_ENTRY 32000
  143. #endif
  144.  
  145. #ifndef MIN_VB_ENTRY
  146. #define MIN_VB_ENTRY -32000
  147. #endif
  148.  
  149. #define MAX_CLIP_POINTS 20
  150. #define POINT_MOD 100
  151.  
  152. #define XaxisP 0
  153. #define XaxisM 1
  154. #define YaxisP 2
  155. #define YaxisM 3
  156. #define ZaxisP 4
  157. #define ZaxisM 5
  158.  
  159. #ifndef min
  160. #define min(x,y) ((x)<(y)?(x):(y))
  161. #endif
  162. #ifndef max
  163. #define max(x,y) ((x)>(y)?(x):(y))
  164. #endif
  165.  
  166. #ifndef BOUNDS_VOLUME
  167. #define BOUNDS_VOLUME(a,b) \
  168.     ((a)=((b).Lengths.x)*((b).Lengths.y)*((b).Lengths.z))
  169. #endif
  170.  
  171. /* due to precision problems with the projection of bounding boxes
  172.    with infinte dimensions in one or two directions set the 
  173.    infinite volume to a 'low' value */
  174.  
  175. #ifndef INFINITE_VOLUME
  176. #define INFINITE_VOLUME BOUND_HUGE/1000
  177. #endif
  178.  
  179.  
  180. /* if a bounding box's length is greater than the critical length,
  181.    set it to an infinite bounding box */
  182.  
  183. #ifndef CRITICAL_LENGTH
  184. #define CRITICAL_LENGTH 1e6
  185. #endif
  186.  
  187.  
  188.  
  189.  
  190. /* public functions defined in addon0.c */
  191.  
  192. void Clip_Polygon PARAMS((VECTOR *Points, int *PointCnt,
  193.   VECTOR *VX1, VECTOR *VX2, VECTOR *VY1, VECTOR *VY2,
  194.   DBL DX1, DBL DX2, DBL DY1, DBL DY2));
  195.  
  196. int Clip_Line PARAMS((VECTOR *P1, VECTOR *P2,
  197.   VECTOR *VX1, VECTOR *VX2, VECTOR *VY1, VECTOR *VY2,
  198.   DBL DX1, DBL DX2, DBL DY1, DBL DY2));
  199.  
  200. void Begin_Point PARAMS((void));
  201. void Print_Point PARAMS((int Repeat));
  202. void End_Point PARAMS((void));
  203.  
  204. void MInvers PARAMS((MATRIX *r, MATRIX *m));
  205.  
  206. void *VB_malloc PARAMS((size_t size));
  207. void *LB_malloc PARAMS((size_t size));
  208.  
  209.  
  210. /* public functions defined in addon1.c */
  211.  
  212. void Init_Project_Tree_Queues PARAMS((void));
  213.  
  214. void Build_Projections PARAMS((void));
  215.  
  216. void Init_View_Coordinates PARAMS((void));
  217.  
  218. void Sort_Objects PARAMS((long int l, long int r));
  219.  
  220. void Project_Vista PARAMS((MATRIX *A0, TRANSFORM *Trans, DBL *a20, DBL *a02, DBL *a11, DBL *a10, DBL *a01, DBL *a00));
  221.  
  222. void Build_Vista_Tree PARAMS((void));
  223.  
  224.  
  225.  
  226. /* public functions defined in addon2.c */
  227.  
  228. void Build_Light_Buffers PARAMS((void));
  229.  
  230.  
  231.  
  232. /* public functions defined in addon3.c */
  233.  
  234. void Recompute_Bboxes PARAMS((void));
  235. void Remove_Unnecessary_Bounds PARAMS((void));
  236. void Print_Quadric_Stats PARAMS((void));
  237.  
  238. #endif
  239.